今天以登入facebook為例,使用selenium爬取網頁的位置,並且輸入信箱以及密碼完成登入。
在開始之前需要先安裝selenium套件
pip install selenium
安裝完成後,需要先安裝瀏覽器的webdriver,在執行python時需要有這個驅動程式才能開啟瀏覽器。本範例以Google Chrome為例,其他的瀏覽器可以上網搜尋安裝方法。首先,需要先了解你的Chrome瀏覽器目前的版本,先點選瀏覽器右上角的三個點。
接著點選設定
點進去後,左邊有一排選項,選取關於Chrome
接著,頁面就會顯示你的瀏覽器版本,以及是否有最新的版本需要更新。以我的瀏覽器為範例,為106.0.5249.119,版本以前三個數字為主,因此我的版本是106。
接著,到chrome webdriver下載的頁面下載106版本的webdriver。
執行程式碼時需要一起執行,我將一段一段介紹程式碼的用意。
首先,先設置操作網頁時,不顯示操作過程,如果想看操作過程,可以將options.add_argument那行註解掉。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
from urllib.request import urlopen
option = Options()
#操作網頁是不顯示網頁 manipulate the browser invisibly
option.add_argument("-headless")
接著,設置webdriver的路徑位置,並且拜訪facebook網站。如果想至其他網站可以更改facebook的網址。
driver_path = 'C:/Users/User/Downloads/chromedriver_win32/chromedriver.exe'
chrome = webdriver.Chrome(driver_path, options=option)
chrome.get("https://www.facebook.com/")
在facebook的HTML裡,email輸入位置的id為email,密碼的欄位id為password。
如果想要輸入信箱,需先抓取信箱欄位的位置,所使用的函數為find_element(),第一個參數需輸入想抓取的標籤名稱,如id、name、tag name等等,有許多標籤可以指定,詳細資訊請參考官方網站說明。原本的函數為find_element_by_id這個形式,前陣子已被修改成find_element,需要特別注意。
輸入資料時使用send_keys(),將資料輸入指定的HTML欄位。email與password需修改成自己的資料,最後寄送帳號與密碼,並且關閉瀏覽器。因為想讓讀者看到寄送後的結果,因此註解掉最後一行程式碼。
email = chrome.find_element("id", "email")
password = chrome.find_element("id", "pass")
time.sleep(5)
email.send_keys('xxxxx@gmail.com')
password.send_keys('xxxxxx')
password.submit()
#關閉瀏覽器 close the browser
#chrome.close()
完整的程式碼
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
from urllib.request import urlopen
option = Options()
#操作網頁是不顯示網頁 manipulate the browser invisibly
#option.add_argument("-headless")
driver_path = 'C:/Users/User/Downloads/chromedriver_win32/chromedriver.exe'
chrome = webdriver.Chrome(driver_path, options=option)
chrome.get("https://www.facebook.com/")
email = chrome.find_element("id", "email")
password = chrome.find_element("id", "pass")
time.sleep(5)
email.send_keys('xxxxx@gmail.com')
password.send_keys('xxxxxx')
password.submit()
#關閉瀏覽器 close the browser
#chrome.close()
謝謝您的瀏覽,程式碼已上傳Github。